/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package compevol;

import java.util.Vector;

/**
 *
 * @author user
 */
public class CrossOverMultiPonto implements Crossover {

    public Vector<Individuo> geraFilho(Individuo pai1, Individuo pai2) {
        Vector<Individuo> result = new Vector();

        Individuo filho1 = new Individuo(pai1.config);
        Individuo filho2 = new Individuo(pai1.config);

        //tem que ter esse for pq cada individuo tem N cromossomos (dependendo da funcao (f2 = 3, f4 = 10), por causa do x1,x2,x3,etc)
        for (int i = 0; i< pai1.cromossomos.size(); i++){
            Cromossomo cromPai1 = pai1.cromossomos.get(i);
            Cromossomo cromPai2 = pai2.cromossomos.get(i);
            Cromossomo cromFilho1 = filho1.cromossomos.get(i);
            Cromossomo cromFilho2 = filho2.cromossomos.get(i);

            for (int j = 0; j < cromPai1.genotipo.length; j++){
                // O ponto de corte serao as posicoes pares do cromossomo
                if((j % 2) == 0) {
                    // inverte
                    cromFilho2.genotipo[j] = cromPai1.genotipo[j];
                    cromFilho1.genotipo[j] = cromPai2.genotipo[j];
                } else {
                    cromFilho1.genotipo[j] = cromPai1.genotipo[j];
                    cromFilho2.genotipo[j] = cromPai2.genotipo[j];
                }
            }
        }
        result.add(filho1);
        result.add(filho2);
        return result;
    }
    
    @Override
    public String toString() {
        return "N Pontos";
    }
}
